﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ubatic.Contracts.Contracts;
using Ubatic.ServiceFactory;
using Ubatic.Contracts.Services;
using Web.Framework;
using Ubatic.Contracts.Enums;
using Ubatic.UI.Code;

namespace Ubatic.UI.App
{
    public partial class UsuarioDetalle : BasePage
    {
        private const string pagListado = "/App/ModificarUsuarios.aspx";

        public UsuarioDto usuarioCurrent
        {
            get
            {
                return (UsuarioDto)ViewState["Usuario"];
            }
            set
            {
                ViewState["Usuario"] = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            //HasPermissionToSeeMe(Operaciones.UsuarioDetalle);
            try
            {
                IUserService seguridadService = Factory.GetUserService();

                if (!this.IsPostBack)
                {
                    if (this.Request.QueryString["Id"] == null)
                    {
                        usuarioCurrent = new UsuarioDto();
                    }
                    else
                    {
                        usuarioCurrent = seguridadService.ObtenerUsuario(Convert.ToInt64(this.Request.QueryString["Id"]));
                    }

                    InicializarListControls();
                    Bindear();
                }

            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private void InicializarListControls()
        {
            List<TipoDocumentoDto> tiposDoc = Factory.GetListService().ObtenerTiposDocumento();
            UIHelper.LoadCbo(tiposDoc, this.ddlTipoDocumento, "-Selecccionar-");
            
            List<DependenciaDto> dependencias = Factory.GetListService().ObtenerDependencias();
            UIHelper.LoadCbo(dependencias, this.ddlUnidadAcademica, "-Selecccionar-");
        }

        private void Bindear()
        {
            if (usuarioCurrent.Id != 0)
            {
                string cuil = usuarioCurrent.Cuil.ToString();
                this.txtCuitA.Text = cuil.Substring(0, 2);
                this.txtCuitB.Text = cuil.Substring(2, 8);
                this.txtCuitC.Text = cuil.Substring(7, 1);
                this.txtNombre.Text = usuarioCurrent.Nombre;
                this.txtApellido.Text = usuarioCurrent.Apellido;
                this.ddlTipoDocumento.SelectedValue = usuarioCurrent.TipoDocumentoId.ToString();
                this.txtNroDocumento.Text = usuarioCurrent.NroDocumento.ToString();
                this.txtCorreoElectronico.Text = usuarioCurrent.CorreoElectronico;
                this.ddlUnidadAcademica.SelectedValue = usuarioCurrent.DependenciaId.ToString();
                this.lblEstadoAutorizacion.Text = usuarioCurrent.EstadoAutorizacionDescripcion;
                this.txtContrasenia.Text = usuarioCurrent.Password;
                this.txtConfirmarContrasenia.Text = usuarioCurrent.Password;
            }
        }

        private void SetData()
        {

            usuarioCurrent.Cuil = long.Parse(string.Concat(this.txtCuitA.Text.Trim(), 
                                                     this.txtCuitB.Text.Trim(), 
                                                     this.txtCuitC.Text.Trim()));

            usuarioCurrent.Nombre = this.txtNombre.Text.Trim();
            usuarioCurrent.Apellido = this.txtApellido.Text.Trim();
            usuarioCurrent.TipoDocumentoId = UIHelper.GetIntFromInputCbo(this.ddlTipoDocumento).Value;
            usuarioCurrent.NroDocumento = UIHelper.GetLongFromInputText(this.txtNroDocumento.Text.Trim()).Value;
            usuarioCurrent.CorreoElectronico = this.txtCorreoElectronico.Text.Trim();
            usuarioCurrent.DependenciaId = UIHelper.GetLongFromInputCbo(this.ddlUnidadAcademica).Value;
            usuarioCurrent.Password = this.txtContrasenia.Text.Trim();
            usuarioCurrent.ForzarCambioContrasenia = this.chkForzarCambio.Checked;            
        }

        private void Save()
        {
            Factory.GetUserService().EditarUsuario(usuarioCurrent);
        }

        private bool Validar()
        {
            return true;
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                try
                {
                    SetData();
                    if (Validar())
                    {
                        Save();
                    }
                    this.RedirectToPagListado();
                    //ShowMessage("Los datos fueron grabados con éxito", WebMessageType.Notification);
                }
                catch (Exception ex)
                {
                    ExceptionManager.Instance.HandleException(ex);
                }
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            RedirectToPagListado();
        }

        private void RedirectToPagListado()
        {
            try
            {
                Navigation.NavigateTo(pagListado);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void btnDeshacerOperacion_Click(object sender, EventArgs e)
        {
            usuarioCurrent.EstadoAutorizacionId = (int)EstadoAutorizacionUsuarioEnum.NoAutorizado;
        }
    }
}